package br.com.fsa.aplication.Model.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;


@Entity
public class Conhecimento implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column (nullable = false)
	private Long conhecimentoID;
	@Temporal(TemporalType.DATE)
	@Column (nullable = false)
	private Date dataEnvio;
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(insertable=true,updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Veiculo veiculo;
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(insertable=true,updatable=true)
	@Fetch(FetchMode.JOIN)
	@Cascade(CascadeType.SAVE_UPDATE)
	private Motorista motorista;
	@OneToMany(mappedBy="conhecimento", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	private List<NotaFiscal> listaNotaFiscal = new ArrayList<NotaFiscal>();
	@Enumerated(EnumType.STRING)
	private ConhecimentoStatus conhecimentoStatus;
	
	public ConhecimentoStatus getConhecimentoStatus() {
		return conhecimentoStatus;
	}
	public void setConhecimentoStatus(ConhecimentoStatus conhecimentoStatus) {
		this.conhecimentoStatus = conhecimentoStatus;
	}
	public void setConhecimentoID(Long conhecimentoID) {
		this.conhecimentoID = conhecimentoID;
	}
	public Long getConhecimentoID() {
		return conhecimentoID;
	}
	public Date getDataEnvio() {
		return dataEnvio;
	}
	public void setDataEnvio(Date dataEnvio) {
		this.dataEnvio = dataEnvio;
	}
	public Veiculo getVeiculo() {
		return veiculo;
	}
	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}
	public Motorista getMotorista() {
		return motorista;
	}
	public void setMotorista(Motorista motorista) {
		this.motorista = motorista;
	}
	public List<NotaFiscal> getListaNotaFiscal() {
		return listaNotaFiscal;
	}
	public void setListaNotaFiscal(List<NotaFiscal> listaNotaFiscal) {
		this.listaNotaFiscal = listaNotaFiscal;
	}
	
	
	
	
}
